package day19;

public class Demo6{
    public static void main(String[] args) {
        new My1().start();
        new My2().start();
        //主内存：线程访问共享变量的位置  比如：money
        //线程工作内存：每个线程都会有一个独立的内存空间
        //来控制自己的线程执行逻辑
        //为什么没有跳出循环：当变量没有被volatile修饰
        //my1线程先开始  先把主内存保存的money变量  读取到自己工作内存
        //my2线程开始  睡醒后  去修改变量的值  先把自己工作内存的
        //再去同步到主内存中去
        //my1线程由于不知道对方工作内存的结果  认为她一直是10万

        //如果money被volatile修饰后
        //当my2修改完后  主内存的值也会刷新
        //my1的工作内存的变量让它直接失效  强制刷新内存保存的money
        
    }
}

class Money {
    public static int money = 100000;
}
class My1 extends Thread{
    public void run(){
        while(Money.money == 100000){
            //System.out.println(Money.money);
        }
        System.out.println("不是十万");
    }
}

class My2 extends Thread{
    public void run(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Money.money = 50000;
    }
}